var Photo = require('../models/Photo'); // 引入Photo模型
var path = require('path');
var fs = require('fs');
var multiparty = require('multiparty');
var join = path.join; // 引入path.join，这样你就可以用"path"命名变量

/**
 * 列表路由
 */ 
exports.list = function(req, res, next) {
  Photo.find({}, function(err, photos) {
    if (err) return next(err);
    res.render('photos', {
      title: 'Photos',
      photos: photos
    });
  });
};

/**
 * 添加表单路由
 */ 
exports.form = function(req, res) {
  res.render('photos/upload', {
    title: 'Photo upload'
  });
};

/**
 * 添加照片提交路由定义
 */
exports.submit = function(dir) {
  return function(req, res, next) {
    var form = new multiparty.Form(dir); // 生成multiparty对象，并配置下载目录路径

    form.parse(req, function(err, fields, files) {
      var img = files.image;
      var name = fields.name || img[0].originalFilename; // 默认为原来的文件名
      var path = dir + img[0].originalFilename;
      fs.rename(img[0].path, path, function(err) { // 重命名文件
        if (err) return next(err); // 委派错误
        Photo.create({
          name: name,
          path: img[0].originalFilename
        }, function(err) {
          if (err) return next(err); // 委派错误
          res.redirect('/');
        });
      });
    });
  };
};

/**
 * 照片下载路由
 */
exports.download = function(dir) { // 设定你要提供的文件所在的目录
  return function(req, res, next) { // 设定路由回调
    var id = req.params.id;
    Photo.findById(id, function(err, photo) { // 加载照片记录
      if (err) return next(err);
      var path = join(dir, photo.path); // 构造指向文件的绝对路径
      // res.sendfile(path); // 相当于直接打开
      res.download(path, photo.name + '.jpeg'); // 给出显式文件名的照片下载路由
    });
  };
};



